import requests
from config import url_academic, headers_web


class CourseManagement:
    def __init__(self):
        self.headers_web = headers_web
        self.url_academic = url_academic

    @classmethod
    def post_add_course(cls, url: str, headers=headers_web, params=None, body=None):
        """
        @Summary: 添加课程接口
        @Description: 1.学业支持管理端-添加课程接口
        :param url: "http://192.168.1.34:8083/"
        :param headers:{
                          "Content-Type":"application/json",
                          "X-Requested-With":"XMLHttpRequest",
                          "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)
                          AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
                        }
        :param params: {validCode: string #验证码（&signKey=123123）}
        :param body:{
                      "courseInfoDo": {
                        "className": "string", #班级名称
                        "coachingMode": integer, #辅导模式 0-教师辅导 1-朋辈互助
                        "collegeCode": "string", #学院code
                        "courseCode": "string", #课程编号
                        "courseName": "string", #课程名称
                        "courseType": integer, #课程类型 0-单项类 1-专业类 2-综合类
                        "creatorId": "string", #创建人id
                        "creatorName": "string", #创建人姓名
                        "id": "string", #课程id
                        "mergeableState": integer, #是否为可合并状态（0-否，1-是）
                        "modifySchedule": integer, #是否为完成后修改排课计划（0-否，1-是）
                        "semesterCode": "string", #学期编号
                        "semesterName": "string", #学期名称
                        "state": integer, #课程状态（0-待提交、1-已提交、2-选课中、3-已结束、4-已完成）
                        "studentList": [
                          {
                            "studentName": "string", #学生姓名
                            "studentNumber": "string" #学号
                          }
                        ],
                        "studentNum": integer, #班级容量
                        "studentType": integer, #名单导入（0-无数据录入，1-选课学生范围，2-上课学生名单）
                        "takeBegtime": "string", #选课开始时间
                        "takeEndtime": "string", #选课结束时间
                        "takeNum": integer #报名人数
                        "whetherCurrentTerm": integer #是否为当前学期（0-否，1-是）
                      },
                      "courseScheduleDo": [
                        {
                          "coachingAddress": "string", #辅导地点
                          "coachingBegtime": "string", #辅导开始时间
                          "coachingDate": "string", #辅导日期
                          "coachingEndtime": "string", #辅导结束时间
                          "collegeName": "string", #学院名称
                          "creatorId": "string", #创建人id
                          "creatorName": "string", #创建人姓名
                          "jobTitle": "string", #教师职称
                          "teacherName": "string", #教师姓名
                          "teacherNo": "string", #教师编号
                          "week": integer #周次
                        }
                      ]
                    }
        :return:
        """
        url = url + "/AcademicSupportAdminApi/v1/coursemanagement/add"
        r = requests.post(url=url, params=params, json=body, headers=headers)
        return r

    @classmethod
    def post_update_course(cls, url: str, headers=headers_web, params=None, body=None, param_path=None):
        """
        @Summary: 更新课程接口
        @Description: 1.学业支持管理端-更新课程接口
        :param url: "http://192.168.1.34:8083/"
        :param headers:{
                          "Content-Type":"application/json",
                          "X-Requested-With":"XMLHttpRequest",
                          "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)
                          AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
                        }
        :param params: {validCode: string #验证码（&signKey=123123）}
        :param body:{
                      "courseInfoDo": {
                        "className": "string", #班级名称
                        "coachingMode": integer, #辅导模式 0-教师辅导 1-朋辈互助
                        "collegeCode": "string", #学院code
                        "courseCode": "string", #课程编号
                        "courseName": "string", #课程名称
                        "courseType": integer, #课程类型 0-单项类 1-专业类 2-综合类
                        "creatorId": "string", #创建人id
                        "creatorName": "string", #创建人姓名
                        "id": "string", #课程id
                        "mergeableState": integer, #是否为可合并状态（0-否，1-是）
                        "modifySchedule": integer, #是否为完成后修改排课计划（0-否，1-是）
                        "semesterCode": "string", #学期编号
                        "semesterName": "string", #学期名称
                        "state": integer, #课程状态（0-待提交、1-已提交、2-选课中、3-已结束、4-已完成）
                        "studentList": [
                          {
                            "studentName": "string", #学生姓名
                            "studentNumber": "string" #学号
                          }
                        ],
                        "studentNum": integer, #班级容量
                        "studentType": integer, #名单导入（0-无数据录入，1-选课学生范围，2-上课学生名单）
                        "takeBegtime": "string", #选课开始时间
                        "takeEndtime": "string", #选课结束时间
                        "takeNum": integer #报名人数
                        "whetherCurrentTerm": integer #是否为当前学期（0-否，1-是）
                      },
                      "courseScheduleDo": [
                        {
                          "coachingAddress": "string", #辅导地点
                          "coachingBegtime": "string", #辅导开始时间
                          "coachingDate": "string", #辅导日期
                          "coachingEndtime": "string", #辅导结束时间
                          "collegeName": "string", #学院名称
                          "creatorId": "string", #创建人id
                          "creatorName": "string", #创建人姓名
                          "jobTitle": "string", #教师职称
                          "teacherName": "string", #教师姓名
                          "teacherNo": "string", #教师编号
                          "week": integer #周次
                        }
                      ]
                    }
        :param param_path：courseInfoId #课程信息ID
        :return:
        """
        url = url + f"/AcademicSupportAdminApi/v1/coursemanagement/{param_path}"
        r = requests.post(url=url, params=params, json=body, headers=headers)
        return r

    @classmethod
    def get_course_info(cls, url: str, headers=headers_web, params=None, param_path=None):
        """
        @Summary: 获取课程详细信息接口
        @Description: 1.学业支持管理端-获取课程详细信息
        :param url: "http://192.168.1.34:8083/"
        :param headers:{
                          "Content-Type":"application/json",
                          "X-Requested-With":"XMLHttpRequest",
                          "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)
                          AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
                        }
        :param params: {
                            validCode: "string", #验证码（&signKey=123123）
                            ownerId："string" #查询人ID
                        }
        :param param_path：courseInfoId #课程信息ID
        :return:{
                      "courseInfoDo": {
                        "className": "string", #班级名称
                        "coachingMode": integer, #辅导模式 0-教师辅导 1-朋辈互助
                        "collegeCode": "string", #学院code
                        "courseCode": "string", #课程编号
                        "courseName": "string", #课程名称
                        "courseType": integer, #课程类型 0-单项类 1-专业类 2-综合类
                        "creatorId": "string", #创建人id
                        "creatorName": "string", #创建人姓名
                        "id": "string", #课程id
                        "mergeableState": integer, #是否为可合并状态（0-否，1-是）
                        "modifySchedule": integer, #是否为完成后修改排课计划（0-否，1-是）
                        "semesterCode": "string", #学期编号
                        "semesterName": "string", #学期名称
                        "state": integer, #课程状态（0-待提交、1-已提交、2-选课中、3-已结束、4-已完成）
                        "studentList": [
                          {
                            "studentName": "string", #学生姓名
                            "studentNumber": "string" #学号
                          }
                        ],
                        "studentNum": integer, #班级容量
                        "studentType": integer, #名单导入（0-无数据录入，1-选课学生范围，2-上课学生名单）
                        "takeBegtime": "string", #选课开始时间
                        "takeEndtime": "string", #选课结束时间
                        "takeNum": integer #报名人数
                        "whetherCurrentTerm": integer #是否为当前学期（0-否，1-是）
                      },
                      "courseScheduleDo": [
                        {
                          "coachingAddress": "string", #辅导地点
                          "coachingBegtime": "string", #辅导开始时间
                          "coachingDate": "string", #辅导日期
                          "coachingEndtime": "string", #辅导结束时间
                          "collegeName": "string", #学院名称
                          "creatorId": "string", #创建人id
                          "creatorName": "string", #创建人姓名
                          "jobTitle": "string", #教师职称
                          "teacherName": "string", #教师姓名
                          "teacherNo": "string", #教师编号
                          "week": integer #周次
                        }
                      ]
                    }
        """
        url = url + f"/AcademicSupportAdminApi/v1/coursemanagement/{param_path}"
        r = requests.get(url=url, headers=headers, params=params)
        return r

    @classmethod
    def post_elective_list(cls, url: str, headers=headers_web, params=None, body=None):
        """
        @Summary: 分页获取所有的选课报名列表接口
        @Description: 1.学业支持学生端-分页获取所有的选课报名列表
        :param url: "http://192.168.1.34:8083/"
        :param headers:{
                          "Content-Type":"application/json",
                          "X-Requested-With":"XMLHttpRequest",
                          "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)
                          AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
                        }
        :param params: {validCode: string #验证码（&signKey=123123）}
        :param body:{
                      "courseName": "string", #辅导课程名称
                      "pageNum": integer, #当前页码
                      "pageSize": integer, #每页记录数
                      "semesterCode": "string", #所属学期code
                      "state": integer, #报名状态（0-未报名、1-已报名、2-已取消、3-已完成）
                      "studentNumber": "string" #学生编号
                    }
        :return:
        """
        url = url + "/AcademicSupportAdminApi//v1/coursemanagement/elective/list"
        r = requests.post(url=url, headers=headers, params=params, json=body)
        return r
